<?php
/**
 * Created by XM·Tan.
 * Motto: Who shuts love out, in turn shall be shut out from love.
 * Date: 2020/12/24 1:20
 */
// 利用反射机制处理工厂模式
namespace app\common\lib;

class ClassArr {

    public static function smsClassStat() {
        return [
            'ali' => "app\common\lib\sms\AliSms",
            'baidu' => "app\common\lib\sms\BaiduSms",
            'jd' => "app\common\lib\sms\JdSms",
        ];
    }

    public static function initClass($type, $class, $param = [], $needInstance = false) {
        // 如果我们工厂模式调用的方法是静态的， 那么我们这个地方返回类库 AliSms
        // 如果不是静态， 我们就需要返回 对象
        if (!array_key_exists($type, $class)) {
            return false;
        }
        $className = $class[$type];

        //  new ReflectionClass('A') => 建立 A 反射类
        // -> newInstanceArgs($args) => 相当于实例化 A 对象
        return $needInstance == true ? (new \ReflectionClass($className))->newInstanceArgs($param) : $className;
    }

}